home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / newsgrp / group99a.txt / 000040_icon-group-sender _Tue Feb 23 14:51:48 1999.msg < prev    next >
Internet Message Format  |  2000-09-20  |  3KB

  1. Return-Path: <icon-group-sender>
  2. Received: (from root@localhost)
  3.     by baskerville.CS.Arizona.EDU (8.9.1a/8.9.1) id OAA04732
  4.     for icon-group-addresses; Tue, 23 Feb 1999 14:50:53 -0700 (MST)
  5. Message-Id: <199902232150.OAA04732@baskerville.CS.Arizona.EDU>
  6. From: "Frank Lhota" <lhotaf@lexma.meitech.com>
  7. To: <icon-group@optima.CS.Arizona.EDU>
  8. Subject: Bridging Icon and C Calls
  9. Date: Tue, 23 Feb 1999 12:03:24 -0500
  10. X-Priority: 3
  11. X-MSMail-Priority: Normal
  12. X-MimeOLE: Produced By Microsoft MimeOLE V4.71.1712.3
  13. Errors-To: icon-group-errors@optima.CS.Arizona.EDU
  14. Status: RO
  15.  
  16. Recently, there have been some discussion of the Icon facility for calling
  17. external C functions. This facility varies widely from platform to platform,
  18. but it basically consists of calling loadfunc to load a C function from a
  19. dynamic library, then calling the function via the Icon callout function (or
  20. directly in the case of Unix).
  21.  
  22. The problem with this facility is that it can only be used for C functions
  23. specifically written for Icon. The C function must accept Icon descriptors
  24. as parameters. You generally cannot call a typical external C function from
  25. Icon without first writing a "skin" function that does Icon-to-C argument
  26. translation.
  27.  
  28. This would be particularly useful under Win 95 / 98 / NT, where the system
  29. services all take the form of functions in dynamic link libraries. The
  30. Windows API has hundreds of functions, many of which would be handy to use
  31. under Icon. These functions cannot be used, however, without some additional
  32. C work to turn Icon arguments into C arguments.
  33.  
  34. What would be nicer if we could create a facility by which callout would
  35. automatically convert Icon parameters to C, e.g. if there is an external
  36. function foo declared as
  37.  
  38.     int foo ( int n, double x );
  39.  
  40. then to call this function from Icon, we first load it with loadfunc, then
  41. do this call:
  42.  
  43.     callout ( "foo", 3, 4.5 )
  44.  
  45. There are numerous complications with doing this. C includes integers and
  46. floating point numbers of various sizes, whereas Icon programmers are
  47. shielded from such concerns. C also uses pointers for many parameters, so we
  48. need to come up with Icon support for this. Pointer parameters can be
  49. implemented using an Icon record, e.g.
  50.  
  51.     record Pointer ( value )
  52.  
  53.     # ...
  54.     # function bar declared as
  55.     #     void bar ( int *ip );
  56.     callout ( "bar", ip := Pointer ( 0 ) )
  57.     # ip.value updated by callout
  58.  
  59. I have some ideas about how this facility could be designed, and
  60. implemented. Before proceeding this much further, however, I would like some
  61. feedback. Would other Icon programmers find this useful? If I complete
  62. something like this for NT, could others help me port this to other
  63. platforms?
  64.  
  65.  
  66.  
  67.  
  68.  
  69.